package com.yc.baseProgram.genericity;

public class Test1<H> {
	
	
	/**
	 * 可以返回任何类型
	 * @return
	 */
	public MyReturn<?> abc() {
		return null;
	}
	
	/**
	 * 返回值带泛型的正确写法
	 * @param <T>
	 * @return
	 */
	public <T> MyReturn<T> abc2(H h) {
		return null;
	}
	
	/**
	 * 返回值带泛型的错误写法：这种写法被视为有个类名字叫T
	 * 也就是说，这种写法已经有明确的表达含义，再这么写就含义冲突产生歧义
	 * @param <T>
	 * @return
	 */
//	public MyReturn<T> abc3() {
//		return null;
//	}
	
	/**
	 * 同理方法参数里 如果要用当前类的泛型的正确写法
	 * @param <T>
	 * @param mr
	 * @return
	 */
	public <T> String abc4(MyReturn<T> mr) {
		return null;
	}
	
	/**
	 * 同理方法参数里 如果要用当前类的泛型的错误写法
	 * @param <T>
	 * @param mr
	 * @return
	 */
//	public String abc5(MyReturn<T> mr) {
//		return null;
//	}
	
	public void m() {
		Object[] a = new Object[9];
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	
	

}
